<?php
/**
 * Shortcuts for lets manager rights
 *
 * @package    letsManager
 * @subpackage misc
 * @author     Jerome Fouilloy
 * @version    SVN: $Rev$
 */
abstract class LetsManagerRights
{
  /*
   * Special member rights (admin and manager)
   */
  /** see stats for each member (money, number exchanges) */
  const SEE_EXCHANGES_STATS = "lets_see_exchanges_stats";

  /** peut ajouter des échanges (auto validé) pour les autres adhérents */
  const ADD_EXCHANGE_OTHERS ="lets_add_exchange_others";

  /** peut modifier ajouter supprimer les offres et demandes de tous les membres */
  const MANAGE_ASKS_OFFERS_OTHERS ="lets_manage_asks_offers_others";

  /** peut modfier ajouter supprimer les catégories utilisés par les offres / demandes / échanges */
  const MANAGE_CATEGORIES ="lets_manage_categories";

  /** peut voir et utiliser les catégoier privées pour les offres / demandes / echanges */
  const USE_PRIVATE_CATEGORY = "lets_use_private_categories";

  /** le membre peut valider les demandes d'activité soumis par les membres */
  const VALIDATE_ACTIVITY = "lets_validate_activity";

  /** peut voir la liste des échanges de tous les membres */
  const SEE_EXCHANGES_LIST = "lets_see_exchanges_list";

  /** peut voir les fiches détaillés des membres */
  const SEE_DETAILS_MEMBER = "lets_see_details_member";

  /** peut utiliser l'argent de l'association */
  const USE_ASSOCIATION_MONEY = "lets_use_association_money";

  /** peut editer valider et annuler les échanges de tous les adhérents */
  const MANAGE_EXCHANGE_OTHERS ="lets_manage_exchange_others";

  /** recoit les emails d'alerte en cas du dépassement du solde maxi ou mini d'un adhérent */
  const RECIPIENT_ALARM_MONEY = "lets_recipient_alarm_money";
  /**
   * Get the name of acl action by the action code
   * @param string $right
   */
  public static function getDisplayNameByCode($right)
  {
    $aclAction = AclActionTable::getByCode($right);
    $rightName = "";
    if($aclAction)
    {
      $rightName = $aclAction->getLabel();
    }
    else{
      $rightName = "[<b>Erreur</b> le droit '".$right."' n'existe pas en base]";
    }
    return $rightName;
  }
  
  /**
   * Check if the user has the specified right and otherwise redirect
   * @param string $right the acl action name
   * @param sfAction $action the action source of the call
   * @param string $routeRedirect the route used if the user don't have  the right specified
   */
  public static function checkRightRedirect($right,sfAction $action,$routeRedirect = '@error_credentials')
  {
    if(!$action->getUser()->hasCredential($right))
    {
      $action->redirect($routeRedirect);
    }
  }
  
  /**
   * Return true if user can add new ask or offer (the user doesn't override association limit)
   * @param integer $user_id
   * @param integer $asso_id
   * @return true or false
   */
  public static function canAddAskOrOffer($user_id,$asso_id)
  {
    $nbMaxAsksAndOffers = LetsConfiguration::nbMemberMaxiAsksAndOffers($asso_id);
    // check number of asks and offers not override limit
    return (LetsUserAskTable::countByMember($user_id)+LetsUserOfferTable::countByMember($user_id)) < $nbMaxAsksAndOffers;
  }
  
  
}
?>